package org.birrap.ejb;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.birrap.entities.BaresUsuarioT;
import org.birrap.entities.BaresUsuarioTPK;

@Stateless
public class BaresUsuarioTBean implements BaresUsuarioTBeanLocal {

    @PersistenceContext(unitName = "BirrApp-ejbPU")
    private EntityManager em;
    
    @Override
    public List<BaresUsuarioT> findAll() 
    {
        Query query = em.createNamedQuery("BaresUsuarioT.findAll");
        
        return (List<BaresUsuarioT>) query.getResultList();
    }
    

    @Override
    public BaresUsuarioT findByIdBarSiesDueno(Integer id) 
    {

    BaresUsuarioT res = null;
    
        Query query = em.createNamedQuery("BaresUsuarioT.findByIdBarSiesDueno")
                        .setParameter("idBar", id);
        
        try 
        {
            res = (BaresUsuarioT) query.getSingleResult();
        } 
        catch(NoResultException e) 
        {
            System.out.println("No existe el id de bar");
        }
        
        return res; 
    }
    
    @Override
    public List<BaresUsuarioT> findByCorreoYFavorito(String correo) {

        List<BaresUsuarioT> res = null;
        
        Query query = em.createNamedQuery("BaresUsuarioT.findByCorreoYFavorito")
                        .setParameter("correo", correo);
        
        try 
        {
            res = (List<BaresUsuarioT>) query.getResultList();
        } 
        catch(NoResultException e) 
        {
            System.out.println("El usuario no tiene favoritos.");
        }
        
        return res; 
    }

    @Override
    public List<BaresUsuarioT> findByCorreo(String correo) {

        List<BaresUsuarioT> res = null;
        
        Query query = em.createNamedQuery("BaresUsuarioT.findByCorreo")
                        .setParameter("correo", correo);
        
        try 
        {
            res = (List<BaresUsuarioT>) query.getResultList();
        } 
        catch(NoResultException e) 
        {
            System.out.println("No existe el correo");
        }
        
        return res; 
    }

    @Override
    public List<BaresUsuarioT> findByDueno(String dueno) {

        List<BaresUsuarioT> res = null;
    
        Query query = em.createNamedQuery("BaresUsuarioT.findByDueno")
                        .setParameter("dueno", dueno);
        
        try 
        {
            res = (List<BaresUsuarioT>) query.getResultList();
        } 
        catch(NoResultException e) 
        {
            System.out.println("No existe el dueno");
        }
        
        return res; 
    }
    
    @Override
    public BaresUsuarioT findBaresTUltimosubidobyDueno(String correo) {
        
        BaresUsuarioT res = null;
        Query query = em.createNamedQuery("BaresUsuarioT.findBaresTUltimosubidobyDueno").
                setParameter("correo", correo);
        
        try {
            res = (BaresUsuarioT) query.getSingleResult();
        } catch(NoResultException e) {
            System.out.println("No existe ultimo bar bar");
        }
        
        return res; 
    }

    @Override
    public BaresUsuarioT insert(BaresUsuarioT bar) {
        
        return update(bar);
    
    }

    @Override
    public BaresUsuarioT update(BaresUsuarioT bar) {
        
        return em.merge(bar);
    }

    
    
    @Override
    public boolean findByIdBarAndCorreo(BaresUsuarioTPK baresUsuarioTPK) {
        boolean res = false;
        BaresUsuarioT bar = null;
        Query query = em.createNamedQuery("BaresUsuarioT.findByIdBarAndCorreo")
                        .setParameter("baresUsuarioTPK", baresUsuarioTPK);
        
        try 
        {
            bar = (BaresUsuarioT) query.getSingleResult();
            
            if (bar != null)
            {
                res = true;
            }
        } 
        catch(NoResultException e) 
        {
            System.out.println("No existen bares con ese correo");
        }
        
        return res;
    }

    @Override
    public boolean remove(BaresUsuarioTPK baresUsuarioTPK) {
        
        boolean correcto = false;
        int resultado = 0;
        
        Query query = em.createNamedQuery("BaresUsuarioT.removeByBaresUsuarioTPK")
                         .setParameter("baresUsuarioTPK", baresUsuarioTPK);
        
        resultado = query.executeUpdate();
        
        if (resultado > 0)
        {
            correcto = true;
        }
        
        return correcto;
    }

    @Override
    public List<BaresUsuarioT> findByCorreoYDueno(String correo) {
        
        List<BaresUsuarioT> res = null;
        
        Query query = em.createNamedQuery("BaresUsuarioT.findByCorreoYDueno")
                        .setParameter("correo", correo);
        
        try 
        {
            res = (List<BaresUsuarioT>) query.getResultList();
        } 
        catch(NoResultException e) 
        {
            System.out.println("El usuario no tiene bares.");
        }
        
        return res; 
    }
    
        public void refresh(BaresUsuarioT bar){
        
        em.refresh(bar);
    }

    @Override
    public boolean findByIdBarAndCorreoAndDueno(BaresUsuarioTPK baresUsuarioTPK) {
       boolean res = false;
        BaresUsuarioT bar = null;
        Query query = em.createNamedQuery("BaresUsuarioT.findByIdBarAndCorreoAndDueno")
                        .setParameter("baresUsuarioTPK", baresUsuarioTPK);
        
        try 
        {
            bar = (BaresUsuarioT) query.getSingleResult();
            
            if (bar != null)
            {
                res = true;
            }
        } 
        catch(NoResultException e) 
        {
            System.out.println("No existen bares con ese correo");
        }
        
        return res;    }
}
